/* 
 *  txdnet.cn tonydon
 * 
 */

function GB2312UTF8(){
    this.Dig2Dec=function(s){
        var retV = 0;
        if(s.length == 4){
            for(var i = 0; i < 4; i ++){
                retV += eval(s.charAt(i)) * Math.pow(2, 3 - i);
            }
            return retV;
        }
        return -1;
    } 
    this.Hex2Utf8=function(s){
        var retS = "";
        var tempS = "";
        var ss = "";
        if(s.length == 16){
            tempS = "1110" + s.substring(0, 4);
            tempS += "10" +  s.substring(4, 10); 
            tempS += "10" + s.substring(10,16); 
            var sss = "0123456789ABCDEF";
            for(var i = 0; i < 3; i ++){
                retS += "%";
                ss = tempS.substring(i * 8, (eval(i)+1)*8);
                retS += sss.charAt(this.Dig2Dec(ss.substring(0,4)));
                retS += sss.charAt(this.Dig2Dec(ss.substring(4,8)));
            }
            return retS;
        }
        return "";
    } 
    this.Dec2Dig=function(n1){
        var s = "";
        var n2 = 0;
        for(var i = 0; i < 4; i++){
            n2 = Math.pow(2,3 - i);
            if(n1 >= n2){
                s += '1';
                n1 = n1 - n2;
            }
            else
                s += '0';
        }
        return s;      
    }
    this.Str2Hex=function(s){
        var c = "";
        var n;
        var ss = "0123456789ABCDEF";
        var digS = "";
        for(var i = 0; i < s.length; i ++){
            c = s.charAt(i);
            n = ss.indexOf(c);
            digS += this.Dec2Dig(eval(n));
        }
        return digS;
    }
    this.Gb2312ToUtf8=function(s1){
        var s = escape(s1);
        var sa = s.split("%");
        var retV ="";
        if(sa[0] != ""){
            retV = sa[0];
        }
        for(var i = 1; i < sa.length; i ++){
            if(sa[i].substring(0,1) == "u"){
                retV += this.Hex2Utf8(this.Str2Hex(sa[i].substring(1,5)));
                if(sa[i].length){
                    retV += sa[i].substring(5);
                }
            }
            else{
                retV += unescape("%" + sa[i]);
            }
        }
        return retV;
    }
    this.Utf8ToGb2312=function(str1){
        var substr = "";
        var a = "";
        var b = "";
        var c = "";
        var i = -1;
        i = str1.indexOf("%");
        if(i==-1){
            return str1;
        }
        while(i!= -1){
            if(i<3){
                substr = substr + str1.substr(0,i-1);
                str1 = str1.substr(i+1,str1.length-i);
                a = str1.substr(0,2);
                str1 = str1.substr(2,str1.length - 2);
                if(parseInt("0x" + a) & 0x80 == 0){
                    substr = substr + String.fromCharCode(parseInt("0x" + a));
                }
                else if(parseInt("0x" + a) & 0xE0 == 0xC0){ //two byte
                    b = str1.substr(1,2);
                    str1 = str1.substr(3,str1.length - 3);
                    var widechar = (parseInt("0x" + a) & 0x1F) << 6;
                    widechar = widechar | (parseInt("0x" + b) & 0x3F);
                    substr = substr + String.fromCharCode(widechar);
                }
                else{
                    b = str1.substr(1,2);
                    str1 = str1.substr(3,str1.length - 3);
                    c = str1.substr(1,2);
                    str1 = str1.substr(3,str1.length - 3);
                    var widechar = (parseInt("0x" + a) & 0x0F) << 12;
                    widechar = widechar | ((parseInt("0x" + b) & 0x3F) << 6);
                    widechar = widechar | (parseInt("0x" + c) & 0x3F);
                    substr = substr + String.fromCharCode(widechar);
                }
            }
            else {
                substr = substr + str1.substring(0,i);
                str1= str1.substring(i);
            }
            i = str1.indexOf("%");
        }
        return substr+str1;
    }
};
function gb2utf8(s){
    var xx=new GB2312UTF8();
    return xx.Gb2312ToUtf8(s);
};
function utf2gbk(s){
    var xx=new GB2312UTF8();
    return xx.Utf8ToGb2312(s);
};

function ec_GBK(sv)
{
    var l=sv.length;
    var t="";
    for(var i=0;i<l;i++)
    {
        var m=sv.charAt(i)
        if(m==' '){
            t+="+"
            }
        else if("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz".indexOf(m)==-1)
        {
            var varasc=sv.charCodeAt(i);
            if(varasc<0)
                varasc+=65536;
            if(varasc>127)
                varasc=UnicodeToAnsi(varasc);
            if(varasc>255)
            {
                var varlow=varasc & 65280;
                varlow=varlow>>8;
                var varhigh=varasc & 255;
                var a=varlow.toString(16);
                if(a.length==1)a="0"+a
                var b=varhigh.toString(16);
                if(b.length==1)b="0"+b
                t+="%"+a+"%"+b
            }
            else
            {
                var a=varasc.toString(16);
                if(a.length==1)a="0"+a
                t+="%"+a
            }
        }
        else
        {
            t+=m
        }
    }
    return t
};
 
function UnicodeToAnsi(chrCode)
{
    var c=chrCode.toString(16);
    var i=ua.indexOf(","+c+"|");
    if(i!=-1)
    {
        var nc=i+c.length+2
        var vc=ua.indexOf(',',nc)
        c=ua.substring(nc,vc)
    }
    return parseInt(c,16)
};
 
//GBK解码函数
 
function dc_GBK(s)
{
    var kb=''
    function dci(s){
        if(kb){
            var c=(kb+s.toString(16)).toUpperCase();
            var i=ua.indexOf("|"+c+",");
            if(i!=-1)
            {
                var vc=ua.lastIndexOf(',',i)+1;
                c=Number('0x'+ua.substring(vc,i))
            }
            kb=''
            return String.fromCharCode(c)
            }else{
            if(s==128){
                return String.fromCharCode(0x20ac)
                }
            else if(s>128){
                kb=s.toString(16);
                return ''
                }
            else{
                return String.fromCharCode(s)
                }
            }
}
return s.replace(/\+/g,' ').replace(/%([0123456789ABCDEF]{2})/ig,function(){
    return dci(Number('0x'+arguments[1]))
    })
};
